Skip to content

Update Openspecimen to 6.3RC8#1

Open
ChristianMUG wants to merge 3301 commits intobibbox:masterfrom
krishagni:master
Open

Update Openspecimen to 6.3RC8#1
ChristianMUG wants to merge 3301 commits intobibbox:masterfrom
krishagni:master

Conversation

@ChristianMUG
Copy link
Copy Markdown

Getting the newest branch from openspecimen

…enabled

in the specimen tree configuration (CP workflows JSON).

The derived specimen is hidden only if
a) hideDerivatives = true
b) has one or more children and all of them are aliquots

This means the derived specimen is displayed if it has no aliquots or no children
Instruct the API, the input is UDN and not name.
1. When site based access is enabled then the user should have received
   access rights on one of the CP sites and one of the participant's MRN
   sites (if available)

2. When site based access is disabled then the user should have received
   access rights on one of the CP sites.
(missed to add the change in the last commit)
Support for managing pick lists within specimen carts.

1. Users can shortlist specimens for distribution, shipping, or other
   processes, and group them into specimen carts.

2. From a cart, users can create one or more pick lists to track specimens
   retrieved from storage (e.g., freezers) for specific actions.

3. Each pick list displays progress with two views: Unpicked and Picked.

4. Users can move specimens from Unpicked to Picked by scanning barcodes
   using supported devices (tablet cameras, handheld scanners, or
   box scanners). Updates are tracked in real time.

5. Pick lists can be created and accessed by any user who has access to
   the underlying cart.

6. Unused or inactive pick lists are automatically deleted as part of
   periodic cleanup.
1) Added specimen actions in the "picked specimens" view of the pick lists.

2) Added specimen type column in the picked and unpicked specimens view

3) Added filters to search specimens by CP and type as well
…array or actual list.

This ensure the iteration will not crash with null access errors...
… results view

1. Added plugin hooks on query results page. Plugins can register their views
   for dislay on the query results toolbar using the following keys:
   page="query-results" and view="toolbar".

   The plugin views receive the query object as input.

2. Exposed query (UI) services for use by the plugin views/components.
… results view

1. Added plugin hooks on query results page. Plugins can register their views
   for dislay on the query results toolbar using the following keys:
   page="query-results" and view="toolbar".

   The plugin views receive the query object as input.

2. Exposed query (UI) services for use by the plugin views/components.
Updated distribution label printing function as follows:

1. When users clicks on Print button without selecting any specimens,
   the distribution labels for all specimens within the order are printed.

   Users are asked for confirmation before proceeding with this action
   to prevent surprises, reduce unwanted carbon footprint...

2. When users select one or more specimens and then click on the Print
   button, the distribution labels for only the selected specimens are
   printed.
Updated distribution label printing function as follows:

1. When users clicks on Print button without selecting any specimens,
   the distribution labels for all specimens within the order are printed.

   Users are asked for confirmation before proceeding with this action
   to prevent surprises, reduce unwanted carbon footprint...

2. When users select one or more specimens and then click on the Print
   button, the distribution labels for only the selected specimens are
   printed.
…t user.

Applies only when the record is being created.
gracefully to prevent crashes during domain-to-interaction object conversion.
1) Switched from static table to expand/collapse accordion style table.
   Fixed the accordion table to handle all types of fields.

2) Displayed registration details when users click on one of the matched
   participant registration.

   Turned the table into clickable cards. When a matching card is clicked,
   a new card with participant registration details appear.

3) Displayed matching participant details using the dictionary configured
   for the registration CP.

4) Added ability to configure widgets within the matched participant details card.

   Implemented AQL backed tables.

   When no widgets are configured, the matched participant details card
   defaults to displaying collected specimens and aliquots count tables.

   Example configuration:

   {
     "name": "matching-participants",
     "data": {
       "detail-widgets": [
         {
           "title": "Primary Specimens",
           "aql": "select Specimen.type, Specimen.tissueSite, Specimen.spmnCollRecvDetails.collContainer, Specimen.availableQty where Specimen.lineage = \"New\" and Specimen.collectionStatus = \"Collected\" and Participant.id = :cprId",
           "params": {
             "dynamic": {
               "cprId": "cpr.id"
             }
           }
         },

         ...
       ]
     }
   }
As soon as the file was selected, the file uploader was unmounted.
However, the uploader runs the code assuming the file input is still
present in the view. As a result, the UI thread crashes with error
and no file is uploaded to the backend.
…tly parse

the multi-valued parameters cpShortTitle and dpShortTitle into an array.

For example
dpShortTile=A,B&dpShortTitle=C is translated to ["A,B", "C"]

Earlier it was translated to ["A", "B", "C"]
(Accidentally  committed the changes to master instead of VP_AI_EMBEDDINGS)

This reverts commit 22ef7f4.
…gning algorithm.

Problem: The logout request and the signature were encoded and sent as SAMLRequest.
SAMLRequest=<Logout Request + Signature on Logout Request>
Further, the URL also didn't specify the algorithm used to sign.

The required format is:
SAMLRequest=<Logout Request>&SigAlg=<Signing Algorithm>&Signature=<Covers both the Logout Request and signing algo>

Fixed the logout URL to conform to the above format.
Request managers can now be specified at the catalog or CP level.
… of all the

input objects identified by comma-separated names (labels, ppids, visit names, etc)

The problem with the earlier implementation was the names was fed into the query
but the output were limited to first 100 form records.

The fix is to divide the input names into chunks of 100 names. Iterate through each
chunk to query and fetch all records, append the records to the CSV file.

Care has been taken to ensure the looping does not break if any of the chunks
return no records.
… job.

Earlier approach: A single query computed collected, missed, not collected,
pending specimen counts for every participant in the database. The output
was subsequently used to create a new stats table.

While this approach worked well for databases with smaller number of participants
and specimens, it started failing on larger databases due to large transaction
size and connection timeouts.

Redesign:
In view of the above, the the job is redesigned to populate the stats in chunks.
By default, participants are divided in chunks of 10K. The job iterates through
each chunk to compute and insert the stats sequentially.

While this might not significantly reduce the execution time, it keeps the
transaction sizes in check and avoids connection timeouts.

Users (super admin) can fine tune the right chunk size for their database by
specifying a numeric value in the "Fixed Parameters" text box of the add/edit
job UI form.
specimen stats for every registered participant across all CPs.
1. Added many-to-one association of CP with CPG. Removed the intermediary
   OS_CP_GROUP_CPS table.

2. Fixed CP add/edit APIs to add / remove to / from group

3. Fixed CPG list API to return the CPs list in chunks / pages instead of
   all the CPs.

4. Added APIs to add / remove bulk CPs to / from CPG

5. Updated the CP APIs to update CP - CPG association in bulk using CSV
   import / export

6. Audit association of CP - CPG

7. Modified permissions: Users can add / remove CP to / from group provided
   they have CP update rights. This is different than earlier approach,
   which required users to have update rights on all group CPs.

8. Other access restrictions continue AS IS.

(At no point in time, all CPs of the group are materialised/fetched into
memory unless the selected page size is large)
Replaces the inline save button with a manual modal dialog to ensure
signature is saved. The modal persists until the user explicitly
selects 'Done' or 'Cancel'.

Why auto-save was not implemented?
Auto saving signatures introduces technical and reliability debt:
a) Stroke Detection: Hard to determine when a user is actually finished.
b) Concurrency: Out of sequence HTTP requests
c) Debouncing: Perceived lag and inconsistent state.

Underlying principle is always to keep things simple.
…rm records.

1) Send Survey: Added a button to the record overview that triggers an
   email/SMS link to participants for remote completion.

2) Survey Mode: Provides an UI toggle for users to enter form data using
   the survey interface.
… including the IDs.

This helps the exported JSON to be reusable across multiple DB instances as long as
the names match or remain consistent.
This will ensure the data model is in sync with the object model.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants